home *** CD-ROM | disk | FTP | other *** search
/ BBS in a Box 3 / BBS in a box - Trilogy III.iso / Files / Prog / B-C / C++Source Code Fmtr Folder / Src / StdFile.cp < prev    next >
Encoding:
Text File  |  1992-04-27  |  2.5 KB  |  115 lines  |  [TEXT/MPS ]

  1. #ifndef __STDFILE__
  2. #include "StdFile.h"
  3. #endif
  4.  
  5. #ifndef __FCNTL__
  6. #include <fcntl.h>
  7. #endif
  8.  
  9. #ifndef __FILES__
  10. #include <files.h>
  11. #endif
  12.  
  13. #ifndef __IOCTL__
  14. #include <ioctl.h>
  15. #endif
  16.  
  17. #ifndef __STDARG__
  18. #include <stdarg.h>
  19. #endif
  20.  
  21.  
  22. // Format strings used for displays and input
  23. //ƒ-
  24. const char StdFile::sOIFmt[]    = "%d";                // Integer format
  25. const char StdFile::sOEFmt[]    = "%g";                // Floating point format
  26.  
  27. const char StdFile::sIUCFmt[]    = "%1s";            // read next non-blank char
  28. const char StdFile::sIUSFmt[]    = "%hi";
  29. const char StdFile::sIUIFmt[]    = "%i";
  30. const char StdFile::sIULFmt[]    = "%li";
  31. const char StdFile::sICFmt[]    = "%1s";
  32. const char StdFile::sISFmt[]    = "%hi";
  33. const char StdFile::sIIFmt[]    = "%i";
  34. const char StdFile::sILFmt[]    = "%li";
  35. const char StdFile::sIFFmt[]    = "%g";
  36. const char StdFile::sIDFmt[]    = "%lg";
  37. const char StdFile::sIEFmt[]    = "%Lg";
  38. //ƒ+
  39.  
  40.  
  41. // Standard file definitions
  42. StdFile gStdin(stdin);
  43. StdFile gStdout(stdout);
  44. StdFile gStderr(stderr);
  45.  
  46.  
  47. //µ   StdFile::~StdFile
  48. #pragma segment StdFile
  49. StdFile::~StdFile()
  50. {
  51.     if (!fIsCopy && fFile)
  52.         fclose(fFile);
  53. }
  54.  
  55.  
  56. //µ   StdFile::Close
  57. #pragma segment StdFile
  58. void StdFile::Close()
  59. {
  60.     if (fFile)
  61.         fclose(fFile);
  62.     fFile = 0;
  63. }
  64.  
  65.  
  66.  
  67. //µ   StdFile::Printf
  68. #pragma segment StdFile
  69. int StdFile::Printf(const char *fmt, ...) const
  70. {
  71.     int retval;
  72.     va_list ap;
  73.  
  74.     va_start(ap, fmt);
  75.     retval = vfprintf(fFile, fmt, ap);
  76.     va_end(ap);
  77.     return (retval);
  78. }
  79.  
  80.  
  81.  
  82. #pragma segment StdFile
  83. //ƒ-
  84. int StdFile::Get(unsigned char& v)    const    {return (fscanf(fFile, sIUCFmt,    &v));}
  85. int StdFile::Get(unsigned short& v)    const    {return (fscanf(fFile, sIUSFmt,    &v));}
  86. int StdFile::Get(unsigned int& v)    const    {return (fscanf(fFile, sIUIFmt,    &v));}
  87. int StdFile::Get(unsigned long& v)    const    {return (fscanf(fFile, sIULFmt,    &v));}
  88. int StdFile::Get(char& v)            const    {return (fscanf(fFile, sICFmt,    &v));}
  89. int StdFile::Get(short& v)            const    {return (fscanf(fFile, sISFmt,    &v));}
  90. int StdFile::Get(int& v)            const    {return (fscanf(fFile, sIIFmt,    &v));}
  91. int StdFile::Get(long& v)            const    {return (fscanf(fFile, sILFmt,    &v));}
  92. int StdFile::Get(float& v)            const    {return (fscanf(fFile, sIFFmt,    &v));}
  93. int StdFile::Get(double& v)            const    {return (fscanf(fFile, sIDFmt,    &v));}
  94. int StdFile::Get(extended& v)        const    {return (fscanf(fFile, sIEFmt,    &v));}
  95. //ƒ+
  96.  
  97.  
  98. //µ   StdFile::GetSize
  99. #pragma segment StdFile
  100. size_t StdFile::GetSize() const
  101. {
  102.     short refNum;
  103.     long size;
  104.  
  105.     if (fFile == 0 || ioctl(fFile->_file, FIOREFNUM, (long *) & refNum) == -1)
  106.         return (0);
  107.  
  108.     if (GetEOF(refNum, &size) != noErr)
  109.         return (0);
  110.  
  111.     return (size);
  112. }
  113.  
  114.  
  115.